package com.gitee.xcfyl.simplehttpserver.server.impl;

import com.gitee.xcfyl.simplehttpserver.config.ServerConfig;
import com.gitee.xcfyl.simplehttpserver.server.HttpServer;

/**
 * 抽象的HttpServer
 *
 * @author 西城风雨楼
 */
public abstract class AbstractHttpServer implements HttpServer {
    /**
     * 标记服务器是否停止
     */
    private volatile boolean stop;

    /**
     * 存放服务器的配置信息
     */
    private ServerConfig serverConfig;

    /**
     * 判断服务器是否终止
     *
     * @return 返回服务器的状态
     */
    public boolean isStop() {
        return stop;
    }

    /**
     * 得到服务器的配置信息
     *
     * @return 返回服务器的配置信息
     */
    public ServerConfig getServerConfig() {
        return serverConfig;
    }

    @Override
    public void init() throws Exception {
        // 服务器初始化时加载配置信息
        serverConfig = ServerConfig.getInstance();
    }

    @Override
    public void stop() throws Exception {
        // 设置服务器为终止状态
        stop = true;
    }

    @Override
    public void start() throws Exception {
        init();
        while (!isStop()) {
            handleConnection();
        }
    }

    /**
     * 具体的服务器子类决定连接的处理方式
     */
    public abstract void handleConnection();
}
